Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Einlesen eines Arrays in Javascript klappt nicht

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Einlesen eines Arrays in Javascript klappt nicht

    This topic has been deleted. Only users with topic management privileges can see it.
    • Ben1983
      Ben1983 last edited by Ben1983

      Hallo, ich möchte aus dem traccar Adapter ein Array auslesen:

      ![0_1740672886690_1960025e-5c75-426e-a3ac-326e44262fa5-image.png](Lade 100% hoch)

      Vor hatte ich es so:

      on(regExDeviceGeofences,(dp)=>{
          const Geofences = JSON.parse(dp.state.val);
      }
      

      Aber schon hier beim Parsen gibt es einen Fehler.
      Ist der DP vielleicht nicht korrekt definiert, oder wie müsste ich es parsen, damit man ein Array als Objekt erhält?

      {
        "type": "state",
        "common": {
          "name": "Geofences",
          "role": "json",
          "type": "string",
          "write": false,
          "read": true
        },
        "native": {},
        "from": "system.adapter.traccar.0",
        "user": "system.user.admin",
        "ts": 1740665087679,
        "_id": "traccar.0.devices.3.geofences",
        "acl": {
          "object": 1636,
          "state": 1636,
          "owner": "system.user.admin",
          "ownerGroup": "system.group.administrator"
        }
      }
      

      in einem anderen Array, welches nicht string sondern number enthält (allerdings auch als string definiert ist, geht es.

      T 1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @Ben1983 last edited by

        @ben1983
        Was ist denn die Ausgabe wenn du den Datenpunkt einfach so ins log schreibst.

        Ben1983 1 Reply Last reply Reply Quote 0
        • haus-automatisierung
          haus-automatisierung Developer Most Active last edited by haus-automatisierung

          @ben1983 sagte in Einlesen eines Arrays in Javascript klappt nicht:

          Aber schon hier beim Parsen gibt es einen Fehler.

          Da fehlt eine Klammer am Ende

          on(regExDeviceGeofences, (dp) => {
              const Geofences = JSON.parse(dp.state.val);
          });
          
          Ben1983 1 Reply Last reply Reply Quote 0
          • Ben1983
            Ben1983 @haus-automatisierung last edited by

            @haus-automatisierung die hatte ich tatsächlich beim hier rein kopieren vergessen.
            die ist schon da.

            haus-automatisierung 1 Reply Last reply Reply Quote 0
            • haus-automatisierung
              haus-automatisierung Developer Most Active @Ben1983 last edited by haus-automatisierung

              @ben1983 Dann ist alles richtig definiert und sollte so klappen. Wie genau lautet denn der Fehler?

              Und was genau steht im Datenpunkt. Zeig mal das JSON.

              Ben1983 1 Reply Last reply Reply Quote 0
              • Ben1983
                Ben1983 @ticaki last edited by

                @ticaki es steht entweder

                []
                

                oder

                ["zu Hause"]
                

                im Log

                1 Reply Last reply Reply Quote 0
                • Ben1983
                  Ben1983 @haus-automatisierung last edited by

                  @haus-automatisierung
                  2cbcab84-69a8-4699-9503-377cea6b5f94-image.png

                  und

                  Error in callback: SyntaxError: Unexpected token 'z', "zu Hause" is not valid JSON
                  

                  er kann es halt nicht parsen, aber wie mache ich denn sonst aus dem Stringarray ein Objekt, damit ich auf die einzelnen elemente zugreifen kann?

                  T paul53 2 Replies Last reply Reply Quote 0
                  • T
                    ticaki Developer @Ben1983 last edited by

                    @ben1983
                    Das sieht valide aus und ein typeof gibt auch string aus?

                    Ben1983 1 Reply Last reply Reply Quote 0
                    • Ben1983
                      Ben1983 @ticaki last edited by

                      @ticaki ja

                      T 1 Reply Last reply Reply Quote 0
                      • T
                        ticaki Developer @Ben1983 last edited by

                        @ben1983

                        und wenn du das editieren willst im State schaut es so aus?
                        Bildschirmfoto 2025-02-27 um 18.53.16.png

                        Ben1983 1 Reply Last reply Reply Quote 0
                        • Ben1983
                          Ben1983 @ticaki last edited by

                          @ticaki Ganz genau.
                          Wie gesagt, ich bin der Meinung, dass das schon mal so ging.
                          Anscheinend ist der string das Problem.
                          it einem Number array geht es.

                          Codierknecht 1 Reply Last reply Reply Quote 0
                          • T
                            ticaki Developer last edited by

                            @ben1983

                            Dann weiß ich auch nicht weiter - im Adapter sieht es aber aus, als wenn der das array nochmal in einen eigenen State schreibt mit join(', '). vielleicht dann daraus holen?!

                            Ben1983 1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @Ben1983 last edited by

                              @ben1983 sagte: Error in callback: SyntaxError: Unexpected token 'z', "zu Hause" is not valid JSON

                              Dieser Fehler wird erzeugt, wenn der DP kein JSON, sondern ein Array enthält.

                              Ben1983 1 Reply Last reply Reply Quote 0
                              • Codierknecht
                                Codierknecht Developer Most Active @Ben1983 last edited by

                                @ben1983

                                Geht auch mit string:

                                0a52fc92-05c0-49dc-9cd3-d636d656e356-grafik.png
                                3b193534-a24f-4496-8cb3-17c5add55974-grafik.png

                                {
                                  "common": {
                                    "name": "array",
                                    "desc": "Manuell erzeugt",
                                    "role": "json",
                                    "type": "string",
                                    "read": true,
                                    "write": true
                                  },
                                  "type": "state",
                                  "native": {},
                                  "_id": "0_userdata.0.Test.array",
                                  "acl": {
                                    "object": 1636,
                                    "state": 1636,
                                    "owner": "system.user.admin",
                                    "ownerGroup": "system.group.administrator"
                                  },
                                  "from": "system.adapter.admin.0",
                                  "user": "system.user.admin",
                                  "ts": 1740681459150
                                }
                                
                                1 Reply Last reply Reply Quote 0
                                • Ben1983
                                  Ben1983 @paul53 last edited by

                                  @paul53 Ja ok, er ist ja als JSON deklariert.
                                  Was soll ich machen, der wert wird ja aus dem Adapter geschrrieben.

                                  Codierknecht paul53 2 Replies Last reply Reply Quote 0
                                  • Codierknecht
                                    Codierknecht Developer Most Active @Ben1983 last edited by Codierknecht

                                    @ben1983 sagte in Einlesen eines Arrays in Javascript klappt nicht:

                                    er ist ja als JSON deklariert.

                                    Der ist genauso deklariert wie Deiner.
                                    Typ = "string", Role = "json".

                                    Edit
                                    Funktioniert mit Role = "state" aber ebenso.

                                    1 Reply Last reply Reply Quote 0
                                    • Ben1983
                                      Ben1983 @ticaki last edited by

                                      @ticaki Also wenn ich in einem Testscript das array direkt rein schreibe, dann gibt es genau den Fehler,
                                      schreibe ich es mit JSON.stringify rein dann funktioniert das auslesen und parsen

                                      Codierknecht 1 Reply Last reply Reply Quote 0
                                      • paul53
                                        paul53 @Ben1983 last edited by paul53

                                        @ben1983 sagte: der wert wird ja aus dem Adapter geschrrieben.

                                        Issue auf Github erstellen.

                                        Workaround:

                                        on(regExDeviceGeofences,(dp)=>{
                                            let Geofences = dp.state.val;
                                            if(typeof Geofences == 'string') Geofences = JSON.parse(Geofences);
                                        };
                                        
                                        Ben1983 1 Reply Last reply Reply Quote 0
                                        • Codierknecht
                                          Codierknecht Developer Most Active @Ben1983 last edited by

                                          @ben1983
                                          Ich kann im Objektbaum rumeditieren oder einfach per setState('...', '["blubb"]') reinschreiben. Funktioniert problemlos.

                                          Ben1983 1 Reply Last reply Reply Quote 0
                                          • Ben1983
                                            Ben1983 @Codierknecht last edited by Ben1983

                                            @codierknecht
                                            Ja reinschreiben oder rumeditieren geht ja auch, aber wenn man mit
                                            setState(id,array); rein schreibt, kann man es später nicht mehr parsen beim lesen,
                                            dazu sollte es mit
                                            setState(id,JSON.stringify(array)); rein geschrieben werden.

                                            Habe den Wert noch wo ander gefunden, wie von @ticaki erwähnt.
                                            ich trenne ihn mit split.
                                            Nicht der Ursprung des Problems, aber naja.

                                            Codierknecht T haus-automatisierung 3 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            531
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            34
                                            1199
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo